package com.example.myapplication

object Demo {

    @JvmStatic
    fun main(a: Array<String>) {

        forStudy()

        createArray()


        val a = 0
        when (a) {
            1 -> println(1)
            2 -> println(2)
            else -> println(3)
        }
    }

    /**
     * for 循环
     */
    private fun forStudy() {

        println("********** for ***********")

        /*循环数字*/
        println("********** 相当于java 不包含后面 ***********")
        for (i in 1 until 3){
            println(" $i")
        }

        println("********** 相包含两边 ***********")
        for (i in 1..3) {
            println(" $i")
        }

        println("********** 反向迭代数字 ***********")
        for (i in 3 downTo 1){
            println(" $i")
        }

        println("********** 设置等差 ***********")
        for (i in 1 until 10 step 3){
            println(" $i")
        }

        println("********** while 正常 ***********")
        var a = 0
        while (a < 3){
            a++
            println(" $a")
        }
    }


    /**
     * 创建数组
     */
    private fun createArray() {
        println("********** array ***********")
        //正常数组
        var array1: Array<Int> = arrayOf(1, 2, 3)

        var array2: Array<String?> = arrayOfNulls(5)

        val array3 = Array(5) { i -> ("i * $i").toString() }

        //it 用于 函数类型中： 函数只有一个参数 。 it表示 参数对象。
        array3.forEach { println(it) }


        //Kotlin 也有无装箱开销的专门的类来表示原生类型数组: ByteArray、 ShortArray、IntArray 等等。
        // 这些类与 Array 并没有继承关系，但是它们有同样的方法属性集。它们也都有相应的工厂方法:

        // 大小为 5、值为 [0, 0, 0, 0, 0] 的整型数组
        val array4 = IntArray(5)

        // 例如：用常量初始化数组中的值
        // 大小为 5、值为 [42, 42, 42, 42, 42] 的整型数组
        val array5 = IntArray(5) { 42 }

        // 例如：使用 lambda 表达式初始化数组中的值
        // 大小为 5、值为 [0, 1, 2, 3, 4] 的整型数组（值初始化为其索引值）
        var array6 = IntArray(5) { it * 1 }
    }

}